const Koa = require("koa");
const path = require("path");
const serve = require("koa-static");
const app = new Koa();
const fs = require("fs");
app.use(async (ctx) => {
  const zks = fs.readFileSync(path.join(__dirname, "index.html"));
  ctx.body = zks;

  // 设置请求头还可以当做html界面
  ctx.response.set("Content-Type", "text/html");
  console.log(ctx.request.url);
});
// // 配置静态文件目录
// app.use(
//   serve(path.join(__dirname, "public"), {
//     maxage: 1000 * 60 * 60 * 24, // 缓存 1 天
//     hidden: true, // 允许访问隐藏文件
//     gzip: true, // 启用 Gzip 压缩
//   })
// );

// 中间件源码
// middleware 是一个函数的集合,函数也就是我们的各种中间件.
// function compose(middleware) {
//   // 判断中间件数组是否符合要求
//   if (!Array.isArray(middleware))
//     throw new TypeError("Middleware stack must be an array!");
//   for (const fn of middleware) {
//     if (typeof fn !== "function")
//       throw new TypeError("Middleware must be composed of functions!");
//   }

//   /**
//    * @param {Object} context
//    * @return {Promise}
//    * @api public
//    */

//   return function (context, next) {
//     // last called middleware #
//     let index = -1;
//     return dispatch(0);
//     function dispatch(i) {
//       if (i <= index)
//         return Promise.reject(new Error("next() called multiple times"));
//       index = i;
//       let fn = middleware[i]; // 查找当前的中间件

//       // 如果当前中间件是最后一个 那么设定next为当前中间件
//       if (i === middleware.length) fn = next;

//       if (!fn) return Promise.resolve();
//       try {
//         // 执行当前中间件,并且设定next为下一个中间件.
//         return Promise.resolve(
//           fn(context, function next() {
//             return dispatch(i + 1);
//           })
//         );
//       } catch (err) {
//         return Promise.reject(err);
//       }
//     }
//   };
// }
// const one = (ctx, next) => {
//   console.log(">> one");
//   next();
//   console.log("<< one");
// };

// const two = (ctx, next) => {
//   console.log(">> two");
//   next();
//   console.log("<< two");
// };

// const three = (ctx, next) => {
//   console.log(">> three");
//   next();
//   console.log("<< three");
// };
// const middleware = [one, two, three];
// compose(middleware)().then();

app.listen(3000, () => console.log("Server running on http://localhost:3000"));
